<?php
/**
 * Esta classe implementa um helper de datagrid 
 */
require_once 'Zend/View/Helper/Abstract.php';
class Fencer_View_Helper_FencerDatagrid extends Zend_View_Helper_Abstract {
	
	/**
	 * Define o nome do form, para ao selecionar todos, selecionar apenas o daquele form
	 * @var string
	 */
	protected $_formName;
	
	/**
     * Objeto store
     * @var Array | Zend_Db_Select | Zend_Db_Table
     */
    protected $_store;
    
    /**
     * action para exclusao
     */
    protected $_actionExclusao;
    
    /**
     * Colecao de campos (colunas) do datagrid
     * @var Array
     */
    protected $_fields = Array ();
    
    /**
     * Colecao de chaves primarias existentes do datagrid
     * @var Array
     */
    protected $_primaryKeys = Array ();
    
    /**
     * Coleção de colunas que o datagrid possui
     * @var Array
     */
    protected $_cols = Array ('0'=> 'default');
    
    
    
    public function fencerDatagrid() {
    
    	$dataGrid = new Fencer_View_Helper_FencerDatagrid ( );
    	$helper = $dataGrid->setView ( $this->view );
//     	$helper->_setPaginator ();
    
    	return $helper;
    }
    
    /**
     * @param $_actionExclusao the $_actionExclusao to set
     */
    public function setFormName($_formName) {
    	$this->_formName = $_formName;
    
    }
    /**
     * @return the $_formName
     */
    public function getFormName() {
    	ver($this->_formName);
    	return $this->_formName;
    }
    
    /**
     * Define o tipo de store a ser utilizado pelo Zend_Paginator.
     * @param Array | Zend_Db_Select | Zend_Db_Table $store
     * @return void
     */
    public function setStore($store) {
    	$this->_store = $store;
//     	$this->_setPaginator ();
    }
    
    /**
     * Retorna o store definido.
     * @return Array | Zend_Db_Select | Zend_Db_Table
     */
    protected function getStore() {
    	if (! isset ( $this->_store ))
    		return array ();
    	return $this->_store;
    }
    
    /**
     * @param $_actionExclusao the $_actionExclusao to set
     */
    public function setActionExclusao($_actionExclusao) {
    	$this->_actionExclusao = $_actionExclusao;
    	$this->getActionExclusao();
    }
    
    /**
     * @return the $_actionExclusao
     */
    public function getActionExclusao() {
    	return $this->_actionExclusao;
    }
    
    /**
     * Inclui uma nova coluna  no datagrid.
     * @param String $fieldName Nome do campo na fonte de dados.
     * @param String $fieldLabel Texto que sera exibido no cabecalho da coluna.
     * @param Bool $primaryKey Se o campo e chave primaria ou nao.
     * @param Array $options Atributos HTML adicionais para a coluna.
     * @param Bool $visible Determina se a coluna será exibida na grid. Normalmente sera falso para as chaves primarias.
     * @param string $linkAlternativo url de um link alternativo
     * @param boolean $useStore Informa se vai criar o link em cima do valor do store ou se vai utilizar uma label fixa, imagem, etc
     * @param array $optionsCell Chave=>valor que irão compor as options de cada cell. Por exemplo, array("onClick"=>"alert('mensagem');")
     * @return void
     */
    public function addField($fieldName, $fieldLabel, $primaryKey = false, Array $options = null, $visible = true, $linkAlternativo = null, $useStore = true, $optionsCell = null) {
    	if ($primaryKey) {
    		$this->_primaryKeys [] = $fieldName;
    	}
    
    	if ($visible) {
    		$this->_fields [] = array ('fieldName' => $fieldName, 'fieldLabel' => $fieldLabel, 'primaryKey' => $primaryKey, 'options' => $options, 'linkAlternativo' => $linkAlternativo, 'useStore' => $useStore, 'optionsCell' => $optionsCell );
    		$this->_cols [] = $fieldName;
    	}
    
    }
    
    public function addHeader(){
    	
    	$conteudo = "";
    	
    	$conteudo = "<tr>";
    	foreach ($this->_fields as $linha){
    		$conteudo .= "<td>{$linha['fieldLabel']}</td>";
    	}
    	$conteudo .= "</tr>";
    	
    	return $conteudo;
    	
    }
    
    public function addBody(){
    	
    	$conteudo = "";
    	foreach ($this->_cols as $col){
    		foreach ($this->_store as $l=>$linha){
    			if($col == $l){
	    			$conteudo  = "<tr>";
	    			foreach($linha as $c=>$col){
	    				if(array_search($c,$this->_cols)){
	    					$conteudo .= "<td>{$col}</td>";
	    				}
	    			}
    				$conteudo .= "</tr>";
    			}
    		}	
    	}
//     	foreach ($this->_store as $linha){
//     		$conteudo  = "<tr>";
//     		foreach($linha as $c=>$col){
//     			if(array_search($c,$this->_cols)){
// 		    		$conteudo .= "<td>{$col}</td>";
//     			}
//     		}
//     		$conteudo .= "</tr>";
//     	}
    	return $conteudo;
    }
    
    public function montaTable(){
    	$conteudo  = "";
    	
    	$conteudo  = "<table border='1px'>";
    	$conteudo .= $this->addHeader();
    	$conteudo .= $this->addBody();
    	$conteudo .= "</table>";
    	
    	return $conteudo;
    	
    }
    
    public function showDataGrid() {
    	$conteudo = ""; 
    	
    	$conteudo = $this->montaTable();
//     	foreach($this->_fields as $linha){
    		
//     		ver($linha);
//     	}
    	
//     	foreach ($this->_primaryKeys as $keys){
//     		ver($keys);
//     	}
//     	die();
    	
    	return $conteudo;
    	
//     	$keys = $this->_getPrimaryKeys ( $rowValue, false );
//     	$retorno .= "<td><input type=\"checkbox\" name=\"ids[]\" value=\"$keys\"></td>";
//     	die();
    }
    
	
	
	
}